home *** CD-ROM | disk | FTP | other *** search
/ Champak 141 / (Vol 141) Oct 17 2011.iso / Games / flight-of-the-museum.swf / scripts / engine / SceneCamera.as < prev    next >
Encoding:
Text File  |  2011-10-17  |  6.3 KB  |  220 lines

  1. package engine
  2. {
  3.    import flash.display.Bitmap;
  4.    import flash.display.BitmapData;
  5.    import flash.geom.Point;
  6.    import flash.geom.Rectangle;
  7.    
  8.    public class SceneCamera extends Bitmap
  9.    {
  10.        
  11.       
  12.       private var _ch:Number = 440;
  13.       
  14.       private var _cw:Number = 700;
  15.       
  16.       private var _cx:Number = 0;
  17.       
  18.       private var _cy:Number = 0;
  19.       
  20.       private var _collisions:Array;
  21.       
  22.       private var _tx:Number = 0;
  23.       
  24.       private var _ty:Number = 0;
  25.       
  26.       private var _lensData:BitmapData;
  27.       
  28.       private var _my:Number = 0;
  29.       
  30.       private var _collisionDebug:Boolean = false;
  31.       
  32.       private var _mx:Number = 0;
  33.       
  34.       private var _cropPadding:Number = 100;
  35.       
  36.       private var _focalLength:Number;
  37.       
  38.       private var _subject:*;
  39.       
  40.       private var _collisionData:BitmapData;
  41.       
  42.       public function SceneCamera(bmd:BitmapData = null, snap:String = "auto", smooth:Boolean = false)
  43.       {
  44.          _tx = 0;
  45.          _ty = 0;
  46.          _cx = 0;
  47.          _cy = 0;
  48.          _cw = 700;
  49.          _ch = 440;
  50.          _cropPadding = 100;
  51.          _collisionDebug = false;
  52.          _mx = 0;
  53.          _my = 0;
  54.          if(!bmd)
  55.          {
  56.             _lensData = new BitmapData(_cw,_ch);
  57.             _collisionData = new BitmapData(_cw,_ch,false,0);
  58.             bmd = _lensData;
  59.          }
  60.          _focalLength = WorldScene.Instance.Con.SC_FOCAL_LENGTH;
  61.          _collisions = new Array();
  62.          super(bmd,snap,smooth);
  63.       }
  64.       
  65.       public function set ty(inVal:Number) : *
  66.       {
  67.          _ty = inVal;
  68.       }
  69.       
  70.       public function init() : *
  71.       {
  72.       }
  73.       
  74.       public function get CamLoc() : Object
  75.       {
  76.          return {
  77.             "x":_cx,
  78.             "y":_cy
  79.          };
  80.       }
  81.       
  82.       public function set tx(inVal:Number) : *
  83.       {
  84.          _tx = inVal;
  85.       }
  86.       
  87.       public function set Subject(inVal:*) : *
  88.       {
  89.          _subject = inVal;
  90.       }
  91.       
  92.       private function drawToLens(obj:*) : *
  93.       {
  94.          var rX:Number = NaN;
  95.          var rY:Number = NaN;
  96.          var collision:Boolean = false;
  97.          rX = _cx;
  98.          rY = _cy;
  99.          if(obj.x - obj.w * obj.s * (obj.z / _focalLength) / 2 < rX * obj.pxd * obj.z + _cw + _cropPadding && obj.x + obj.w * obj.s * (obj.z / _focalLength) / 2 > rX * obj.pxd * obj.z - _cropPadding && obj.y - obj.h * obj.s * (obj.z / _focalLength) / 2 < rY * obj.pyd * obj.z + _ch + _cropPadding && obj.y + obj.h * obj.s * (obj.z / _focalLength) / 2 > rY * obj.pyd * obj.z - _cropPadding || obj.lockX || Boolean(obj.lockY))
  100.          {
  101.             obj.CameraFocus = true;
  102.             if(obj.solid)
  103.             {
  104.                _collisionData.fillRect(new Rectangle(0,0,_cw,_ch),0);
  105.                obj.collisionDraw(_collisionData,rX,rY);
  106.                collision = Boolean(_subject.findCollision(_collisionData,16711680,rX,rY));
  107.                if(collision)
  108.                {
  109.                   _collisions.push(obj);
  110.                }
  111.             }
  112.             if(obj.vis)
  113.             {
  114.                obj.draw(_lensData,rX,rY);
  115.             }
  116.             obj.AuditMeter = 0;
  117.          }
  118.          else
  119.          {
  120.             obj.CameraFocus = false;
  121.             ++obj.AuditMeter;
  122.          }
  123.       }
  124.       
  125.       public function get tx() : Number
  126.       {
  127.          return _tx;
  128.       }
  129.       
  130.       public function get ty() : Number
  131.       {
  132.          return _ty;
  133.       }
  134.       
  135.       public function get FocalLength() : Number
  136.       {
  137.          return _focalLength;
  138.       }
  139.       
  140.       public function updateDisplay() : *
  141.       {
  142.          var sceneData:Object = null;
  143.          var rX:Number = NaN;
  144.          var rY:Number = NaN;
  145.          var i:int = 0;
  146.          var len:int = 0;
  147.          var tx:Number = NaN;
  148.          var ty:Number = NaN;
  149.          _collisions.splice(0,_collisions.length);
  150.          if(_subject)
  151.          {
  152.             tx = (_subject.x - 40 + _subject.vx * 7.5) / _subject.z - _cw / 1.5 / _focalLength;
  153.             ty = (_subject.y + _subject.vy * 5) / _subject.z - _ch / 1.5 / _focalLength;
  154.             _tx += (tx - _tx) * 0.25;
  155.             _ty += (ty - _ty) * 0.25;
  156.             _cx += (_tx - _cx) * 0.25;
  157.             _cy += (_ty - _cy) * 0.25;
  158.          }
  159.          if(_cx < 0)
  160.          {
  161.             _cx = 0;
  162.          }
  163.          if(_cy < 0)
  164.          {
  165.             _cy = 0;
  166.          }
  167.          if(_cx > 3750)
  168.          {
  169.             _cx = 3750;
  170.          }
  171.          if(_cy > 400)
  172.          {
  173.             _cy = 400;
  174.          }
  175.          sceneData = WorldScene.Instance.SceneData;
  176.          _lensData.lock();
  177.          _collisionData.lock();
  178.          _lensData.fillRect(new Rectangle(0,0,_cw,_ch),0);
  179.          rX = _cx;
  180.          rY = _cy;
  181.          if(rX < 490)
  182.          {
  183.             _lensData.copyPixels(sceneData.sub_bg_city,new Rectangle(rX * 0.2 + 50,rY * 0.25 - 50,_cw,_ch),new Point(0,0));
  184.          }
  185.          if(rX > 200 && rX < 1174)
  186.          {
  187.             _lensData.copyPixels(sceneData.sub_bg_arch,new Rectangle(rX * 0.88 - 790,rY * 0.95 - 15,_cw,_ch),new Point(0,0));
  188.          }
  189.          if(rX > 1630 && rX < 2900)
  190.          {
  191.             _lensData.copyPixels(sceneData.sub_bg_space,new Rectangle(rX * 0.7 - 1600,rY * 0.7 - 10,_cw,_ch),new Point(0,0));
  192.          }
  193.          _lensData.copyPixels(sceneData.bg,new Rectangle(Math.floor(rX),Math.floor(rY),_cw,_ch),new Point(0,0),null,null,true);
  194.          i = 0;
  195.          for(i = 0; i < sceneData.SceneryMGObjects.length; drawToLens(sceneData.SceneryMGObjects[i]),i++)
  196.          {
  197.          }
  198.          for(i = 0; i < sceneData.GameplayObjects.length; drawToLens(sceneData.GameplayObjects[i]),i++)
  199.          {
  200.          }
  201.          for(i = 0; i < sceneData.FXObjects.length; drawToLens(sceneData.FXObjects[i]),i++)
  202.          {
  203.          }
  204.          for(i = 0; i < sceneData.SceneryFGObjects.length; drawToLens(sceneData.SceneryFGObjects[i]),i++)
  205.          {
  206.          }
  207.          _lensData.unlock();
  208.          _collisionData.unlock();
  209.          for(i = 0; i < _collisions.length; i++)
  210.          {
  211.             WorldScene.Instance.collisionRegistered(_collisions[i]);
  212.          }
  213.          if(_collisionDebug)
  214.          {
  215.             _lensData.draw(_collisionData);
  216.          }
  217.       }
  218.    }
  219. }
  220.